
require 'APIdatosFactura'
require 'copiagenda'
require 'SmsOmf/SmsSender'
require 'omf/mms'
require 'omf/mms/sender'
include CopiAgenda
include SmsOmf
include OMF::MMS
include OMF::MMS::Sender

class NubeamigosController < ApplicationController
LOGIN_PARAMETERS = %w(copiagendaUser copiagendaPass canalClienteUser canalClientePass)
TIPOS_USUARIO = %w(contrato targeta)
 layout "application", :except => :sendsms
  protect_from_forgery :except => :sendsms



# ssl_required :inputForm,:nube,:nubeNumeros,:fusion,:datosJSON

 before_filter :checkSession, :except => :inputForm

 #Devuelve una tabla con todo el detalle de consumo
  def fusion
    @result=getFacturaContactos
    render :action => :index
  end
 
  #Introduce los datos del usuario en la sesión
  def inputForm
    if request.post?
      pp params
      session[:tipoUser] = "contrato"
      if params["canalClienteUser"]=="" or params["canalClientePass"]==""
        @error="Introduce user y pass"
        redirect_to :action => :inputForm
      elsif params["copiagendaUser"]=="" or params["copiagendaPass"]==""
        session[:canalClienteUser] = params["canalClienteUser"]
        session[:canalClientePass] = params["canalClientePass"]
        redirect_to :action => :nubeNumeros
      else
        session[:canalClienteUser] = params["canalClienteUser"]
        session[:canalClientePass] = params["canalClientePass"]
        session[:copiagendaUser] = params["copiagendaUser"]
        session[:copiagendaPass] = params["copiagendaPass"]
        redirect_to :action => :nube
      end
    #@credentials = Credentials.new(params)
  else
    #@credentials = Credentials.new
  end
  
    @parameters = LOGIN_PARAMETERS
    @tiposUser = TIPOS_USUARIO
    
  end
  
  
  def sendsms
     msje=params[:text]
     if(params[:mms]=="0")
       envio = SmsSender.new("USER_OMF","PASS_OMF")
       pp params
       begin
          result = envio.send(params[:mtSms],msje)
          @message = 'Message successfully sent!'
       rescue
          @message = 'An error occurred sending the message'
       end
       return
    else
      name= params[:upload]['datafile'].original_filename
      #name =  "Paisaje.jpg"
      directory = "public/data"
      # create the file path
      path = File.join(directory, name)
      # write the file
      File.open(path, "wb") { |f| f.write(params[:upload]['datafile'].read )}
     
      Movistar.new().send(Message.new(params[:mtSms],"MMS","public/data/"+name,msje))
      File.delete("public/data/"+name)
      @message = 'Message successfully sent!'
      
    end
  end
  
  #Devuelve una nube de amigos
  def nube
    
    @result=getFacturaContactos()
  end
  
  #Devuelve una nube con los números (si no introduce datos de copiAgenda)
   def nubeNumeros
     if session[:tipoUser]=="contrato"
        @result=getDatosFactura("h#{session[:canalClienteUser].upcase}","#{session[:canalClientePass]}")
      else
        @result=getDatosFactura("M#{session[:canalClienteUser].upcase}","#{session[:canalClientePass]}")
      end
      @errorCopiAgenda = params[:errorCopiAgenda]
 end
 
 #Devuelve los datos de la nube en formato JSON
 def datosJSON
   @result=getFacturaContactos
   @result=@result.to_json
  end
 
  private
 
  #Obtener datos de factura
  def getDatosFactura(user, pass)
    api=APIdatosFactura.new
    result = api.get_data(user, pass)
    if result.nil?
      puts "devuelvo nulo"
      return nil
    end
    return JSON.parse(result)
  end
  
  #Comprueba si hay datos en la sesión
  def checkSession
   if session[:canalClienteUser].nil? or session[:canalClientePass].nil?
      redirect_to :action => :inputForm
   end
   
 end
 
 #Devuelve un array con los datos de la factura y contactos
  def getFacturaContactos()
    if session[:tipoUser]=="contrato"
      @result=getDatosFactura("h#{session[:canalClienteUser].upcase}","#{session[:canalClientePass]}")
    else
      @result=getDatosFactura("M#{session[:canalClienteUser].upcase}","#{session[:canalClientePass]}")
    end
    @contacts = CopiAgenda::get_contacts("#{session[:copiagendaUser]}", "#{session[:copiagendaPass]}")
    @contacts.sort! { |a,b| a.surname.downcase <=> b.surname.downcase }    
    if @contacts.nil?
      @@errorCopiAgenda = true
      pp "paso a modo numeros"
      redirect_to :action => :nubeNumeros, :errorCopiAgenda => true
      return
    end
    unless @result.nil?
      @contacts.each do |contact|
        if @result["consumo"].has_key?(contact.phonenumber)
            dato = @result['consumo'].fetch(contact.phonenumber)
            #puts "Encontrado #{contact.name} con #{dato['numLlamadas']} llamadas"
            @result['consumo'].fetch(contact.phonenumber)['nombre'] = "#{contact.name} #{contact.surname}"
        end  
      end
    else
      @mo = session[:copiagendaUser]
      puts @mo
    end
    return @result
  end
end
